/**
*  \file random.h
*
*  \brief
*
*  \author Michael J. Hohmann  michael.hohmann@linde-mh.de
*
*
*
*
*
*/
#ifndef RANDOM_H_INCLUDED
#define RANDOM_H_INCLUDED

/*================================================[ public includes  ]================================================*/
#include "../cfg/prj.h"

/*================================================[ public defines   ]================================================*/

/*================================================[ public datatypes ]================================================*/

typedef U32 (*random_entropy_func_t)(void);


/** Object definition.
* 
* The struct random_obj defines the attribute of an object.
*/
struct random_obj
{	
   U32 seed;
   random_entropy_func_t entropy;
};

/*================================================[ public variables ]================================================*/

/*================================================[ inline functions ]================================================*/

/*================================================[ public functions ]================================================*/

/**
*  Constructor.
*
*  Construct an object. 
*
*  \param me Object pointer. NIL will throw an assert.
*
*  \return RC_SUCCESS if successful.
*/
RC   random_construct( struct random_obj *me, U32 seed, random_entropy_func_t entropy_src );
U8   random_generator_u8 ( struct random_obj *me );
S8   random_generator_s8 ( struct random_obj *me );
U16  random_generator_u16( struct random_obj *me );
S16  random_generator_s16( struct random_obj *me );
U32  random_generator_u32( struct random_obj *me );
S32  random_generator_s32( struct random_obj *me );
U8   random_u8 ( void );
S8   random_s8 ( void );
U16  random_u16( void );
S16  random_s16( void );
U32  random_u32( void );
S32  random_s32( void );
void random_generator_set( struct random_obj *me, void *dest, pal_size_t size );
void random_set( void *dest, pal_size_t size );

/*====================================================================================================================*/

#endif

/***********************************************************************************************************************
*                             Copyright 2020 Linde Material Handling. All rights reserved.                             *
***********************************************************************************************************************/
